package main

import (
	"log"
	"gateway-api/tools"
)

/*
 +----------------------------------------------------------------------
 + Title        : logsConsumer
 + Author       : huwl
 + Version      : 2.0.0
 + Initial-Time : 2020-11-23
 + Last-time    : 这个文件最后修改的时间 + 修改人的名称
 + Desc         : 日志消费者【使用调度规则】
 +				:	- 默认多个消费者轮询调度,缺点无法充分利用消费的消费能力
 +				:	- 需要力求充分利用消费的性能,采用能者多劳
 +				:	- 注意：消费者必须要设置，生产者不用设置
 +----------------------------------------------------------------------
*/

// 运行程序命令: go run .\consoles\rabbitMQConsumer\logsConsumer\main.go

/**
 * 日志消费者
 *
 * @param string queueName ----------------------------------必传,队列名称
 * @param string consumerName -------------------------------必传,消费者名称
 * @author huwl
 */
func LogsConsumer(queueName, consumerName string) {
	log.Println("------------- logs " + consumerName + " start -------------")
	rm, err := tools.NewRabbitMQ()
	if err != nil {
		log.Fatalf("Failed to create RabbitMQ: %v", err)
	}

	// 在没有返回ack之前，最多只接收1个消息
	// 设置 prefetch count数值为1，这样只有当消费者消费完消息并返回ack确认后RabbitMQ才会给其分发消息，否则只会将消息分发给其他空闲状态的消费者
	err = rm.Ch.Qos(1, 0, false)
	if err != nil {
		log.Fatalf("Failed to Qos: %v", err)
	}

	// 创建队列，注意如果生产者端已经创建则无需再创建

	// 消费消息
	rm.ConsumeMessage(tools.ConsumerMessageParam{
		Queue:    queueName,
		Consumer: consumerName,
		AutoAck:  false,
	})
}
func main() {
	go LogsConsumer("logs-fanout.queue-01", "LogsConsumer-01")

	LogsConsumer("logs-fanout.queue-02", "LogsConsumer-02")
}
